package com.catosist.run.business.gestorruta;

import com.catosist.run.dataaccess.domain.RutaDao;
import com.catosist.run.dataaccess.model.RutaVO;
import com.catosist.run.services.RutaDTO;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Bicho
 */
public class GestorRutaImpl implements GestorRuta {

    public GestorRutaImpl() {
    }

    @Override
    public List<RutaDTO> getAll() {

        System.out.println("GestorRutaImpl: Obtener todas Rutas");
//        if (rutaVOs == null) {
        rutaVOs = rutaDao.getAll();
//        }
        List<RutaDTO> rutaDTOs = new LinkedList<RutaDTO>();
        for (Iterator<RutaVO> it = rutaVOs.iterator(); it.hasNext();) {
            RutaVO rutaVO = it.next();
            RutaDTO rutaDTO = new RutaDTO(
                    rutaVO.getId(),
                    rutaVO.getDescripcion(),
                    rutaVO.getDistancia());
            rutaDTOs.add(rutaDTO);

        }
        return rutaDTOs;
    }

    @Override
    public RutaDTO getByIndex(int indice) {
        RutaVO rutaVO = getVOatIndex(indice);
        return new RutaDTO(
                rutaVO.getId(),
                rutaVO.getDescripcion(),
                rutaVO.getDistancia());

    }

    @Override
    public RutaDTO getById(int voId) {
        RutaVO rutaVO = rutaDao.get(voId);
        RutaDTO rutaDTO = new RutaDTO();
        rutaDTO.setDescripcion(rutaVO.getDescripcion());
        rutaDTO.setDistancia(rutaVO.getDistancia());
        rutaDTO.setId(rutaVO.getId());
        return rutaDTO;
    }

    @Override
    public int getIdAtIndex(int indice) {
        return getVOatIndex(indice).getId();
    }

    @Override
    public void saveOrUpdate(RutaDTO o) {
        RutaVO rutaVO = new RutaVO();
        rutaVO.setDescripcion(o.getDescripcion());
        rutaVO.setDistancia(o.getDistancia());

        if (o.getId() > 0) {
            rutaVO.setId(o.getId());
        }
        rutaDao.saveOrUpdate(rutaVO);
    }

    @Override
    public void deleteById(int i) {
        rutaDao.deleteById(i);
    }

    private RutaVO getVOatIndex(int indice) {
        return rutaVOs.get(indice);
    }

    public RutaDao getRutaDao() {
        return this.rutaDao;
    }

    public void setRutaDao(RutaDao rutaDao) {
        this.rutaDao = rutaDao;
    }
    private List<RutaVO> rutaVOs;
    private RutaDao rutaDao;

    @Override
    public void updateListVo() {
        rutaVOs = rutaDao.getAll();
    }

    public int getIndexOf(int voId) {
        for (int i = 0; i < rutaVOs.size(); i++) {
            RutaVO rutaVO = rutaVOs.get(i);
            if (rutaVO.getId() == voId) {
                return i;
            }
        }
        return 0;
    }

    public void deleteByIndex(int index) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
